package com.groupbuying.common.baseutils.baseframework4plugins.basecrud.web;//package com.mengtai.baseutils.baseframework4plugins.basecrud.web;
//
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONArray;
//import com.alibaba.fastjson.JSONObject;
//import com.mengtai.baseutils.baseframework4plugins.basecrud.exception.AppException;
//import com.mengtai.baseutils.baseframework4plugins.basecrud.exception.LogException;
//import com.mengtai.baseutils.baseframework4plugins.basecrud.service.BaseService;
//import BaseModel;
//import ConditionOpTypeEnum;
//import BaseWebModel;
//import DataTablesPageParam;
//import Pager;
//import org.apache.commons.lang.StringUtils;
//import org.apache.shiro.SecurityUtils;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.ui.Model;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.io.IOException;
//import java.io.PrintWriter;
//import java.lang.reflect.Field;
//import java.lang.reflect.Method;
//import java.util.*;
//
///**
// * @anthor zmlmagic
// * @date 2018/12/26 11:57 AM
// * @company 蒙泰互联网公司
// * @des 备注说明
// **/
//public class BaseCommonController<M extends BaseModel, QM extends BaseModel> {
//    protected String modulePathName = "";
//    protected BaseService bs = null;
//    protected String moduleName = "";
//    protected String moduleJspPath = "";
//    protected String moduleMapping = "";
//    public static final String ERROR_BACK_URL = "ERROR_BACK_URL";
//    public static final String ERR_MSG_COMMON_PAGE = "error/ErrorPage";
//    public static final String ERROR_MSG_PRE = "ShowMsgs";
//    protected Logger log = null;
//
//    public BaseCommonController() {
//    }
//
//    public void initParams(String moduleMapping, String moduleJspPath, String moduleName, Class controllerClass, String modulePathName) {
//        this.moduleMapping = moduleMapping;
//        this.moduleJspPath = moduleJspPath;
//        this.moduleName = moduleName;
//        this.log = LoggerFactory.getLogger(controllerClass);
//        this.modulePathName = modulePathName;
//    }
//
//    public Map<String, List<String>> getMapErrorMsg(HttpServletRequest request) {
//        return (Map)request.getAttribute("ShowMsgs");
//    }
//
//    public void putErrorMsg(String key, String msg, HttpServletRequest request) {
//        Map<String, List<String>> mapErrorMsg = (Map)request.getAttribute("ShowMsgs");
//        List<String> list = new ArrayList();
//        Object obj = mapErrorMsg.get(key);
//        if (obj != null) {
//            list = (List)obj;
//        }
//
//        ((List)list).add(msg);
//        mapErrorMsg.put(key, list);
//        request.setAttribute("ShowMsgs", mapErrorMsg);
//    }
//
//    public String exceptionExecute(Exception ex, HttpServletRequest request) {
//        if (ex instanceof AppException) {
//            AppException ae = (AppException)ex;
//            this.putErrorMsg(ae.getCompId(), ae.getMessage(), request);
//            Object backUrl = request.getAttribute("ERROR_BACK_URL");
//            return backUrl != null ? "" + backUrl : "error/ErrorPage";
//        } else {
//            if (ex instanceof LogException) {
//                LogException lex = (LogException)ex;
//                this.log.error(lex.getLogInfo(), lex.getOriginException());
//            } else {
//                this.log.error("", ex);
//            }
//
//            return "error/ErrorPage";
//        }
//    }
//
//    public void setBs(BaseService bs) {
//        this.bs = bs;
//    }
//
//    public void basePreparedAddData(Model model, HttpServletRequest request) {
//    }
//
//    public String baseGetAddPage() {
//        return this.moduleJspPath + "/" + this.moduleName + "Add";
//    }
//
//    public boolean baseCheckAddData(Model model, M m, HttpServletRequest request) {
//        return true;
//    }
//
//    public String baseGetAddSuccessPage() {
//        return this.moduleJspPath + "/" + this.moduleName + "Success";
//    }
//
//    public void baseSetAddErrorPage(HttpServletRequest request) {
//        request.setAttribute("ERROR_BACK_URL", this.moduleJspPath + "/" + this.moduleName + "Add");
//    }
//
//    public M basePreAddData(M m, HttpServletRequest request) {
//        return m;
//    }
//
//    public void initErrorMsgMap(HttpServletRequest request) {
//        Map<String, List<String>> mapErrorMsg = new HashMap();
//        request.setAttribute("ShowMsgs", mapErrorMsg);
//    }
//
//    public String baseDoAdd(Model model, M m, HttpServletRequest request) {
//        this.baseSetAddErrorPage(request);
//        this.initErrorMsgMap(request);
//        if (!this.baseCheckAddData(model, m, request)) {
//            return (String)request.getAttribute("ERROR_BACK_URL");
//        } else {
//            m = this.basePreAddData(m, request);
//            this.bs.create(m);
//            this.baseCleanQuerySession(request);
//            return "true";
//        }
//    }
//
//    public void baseAfterAdd2json(HttpServletResponse response) throws IOException {
//        Map<String, Object> jsonMap = new HashMap();
//        jsonMap.put("rsp", true);
//        PrintWriter out = response.getWriter();
//        out.print(JSON.toJSONString(jsonMap));
//    }
//
//    public void basePreparedUpdateData(Model model, HttpServletRequest request) {
//    }
//
//    public String baseGetUpdatePage() {
//        return this.moduleJspPath + "/" + this.moduleName + "Update";
//    }
//
//    public boolean baseCheckUpdateData(Model model, M m, HttpServletRequest request) {
//        return true;
//    }
//
//    public M basePreUpdateData(M m, HttpServletRequest request) {
//        return m;
//    }
//
//    public String baseDoUpdate(Model model, M m, HttpServletRequest request) {
//        this.baseSetUpdateErrorPage(request);
//        this.initErrorMsgMap(request);
//        if (!this.baseCheckUpdateData(model, m, request)) {
//            return (String)request.getAttribute("ERROR_BACK_URL");
//        } else {
//            m = this.basePreUpdateData(m, request);
//            this.bs.update(m);
//            this.baseCleanQuerySession(request);
//            return "true";
//        }
//    }
//
//    public String baseGetUpdateSuccessPage() {
//        return this.moduleJspPath + "/" + this.moduleName + "Success";
//    }
//
//    public void baseSetUpdateErrorPage(HttpServletRequest request) {
//        request.setAttribute("ERROR_BACK_URL", this.moduleJspPath + "/" + this.moduleName + "Update");
//    }
//
//    public void baseAfterUpdate2json(HttpServletResponse response) throws IOException {
//        Map<String, Object> jsonMap = new HashMap();
//        jsonMap.put("rsp", true);
//        PrintWriter out = response.getWriter();
//        out.print(JSON.toJSONString(jsonMap));
//    }
//
//    public void basePreparedDeleteData(Model model, HttpServletRequest request) {
//    }
//
//    public String baseGetDeletePage() {
//        return this.moduleJspPath + "/" + this.moduleName + "Delete";
//    }
//
//    public String baseGetDeleteSuccessPage() {
//        return this.moduleJspPath + "/" + this.moduleName + "Success";
//    }
//
//    public void baseAfterDelete2json(HttpServletResponse response) throws IOException {
//        Map<String, Object> jsonMap = new HashMap();
//        jsonMap.put("rsp", true);
//        PrintWriter out = response.getWriter();
//        out.print(JSON.toJSONString(jsonMap));
//    }
//
//    public void baseAfterDeletes2json(HttpServletResponse response) throws IOException {
//        Map<String, Object> jsonMap = new HashMap();
//        jsonMap.put("rsp", true);
//        PrintWriter out = response.getWriter();
//        out.print(JSON.toJSONString(jsonMap));
//    }
//
//    public String baseGetInfoPage() {
//        return this.moduleJspPath + "/" + this.moduleName + "Info";
//    }
//
//    public void basePreparedInfoData(Model model, HttpServletRequest request) {
//    }
//
//    public QM baseParseQueryModel(HttpServletRequest request) {
//        String searchParam = request.getParameter("searchParam");
//        QM qm = this.getQueryModel();
//        Map<String, Object> searchParamMap = new HashMap();
//        JSONArray searParamArr = JSONArray.parseArray(searchParam);
//        Iterator var7 = searParamArr.iterator();
//
//        while(var7.hasNext()) {
//            Object o = var7.next();
//            JSONObject jo = (JSONObject)o;
//            DataTablesPageParam dtpp = (DataTablesPageParam)JSON.parseObject(jo.toJSONString(), DataTablesPageParam.class);
//            searchParamMap.put(dtpp.getName(), dtpp.getValue());
//        }
//
//        var7 = searchParamMap.keySet().iterator();
//
//        while(var7.hasNext()) {
//            String key = (String)var7.next();
//            String v = (String)searchParamMap.get(key);
//            if (key.endsWith("_q")) {
//                qm.getMapCondition().put(key.substring(0, key.length() - 2), ConditionOpTypeEnum.valueOf(v).getCode());
//            } else {
//                String fieldname = key;
//                if (key.endsWith("_s")) {
//                    fieldname = key.substring(0, key.length() - 2);
//                }
//
//                if (!StringUtils.isEmpty(v)) {
//                    this.getOneFiledValue(fieldname, searchParamMap.get(key), qm);
//                }
//            }
//        }
//
//        return qm;
//    }
//
//    public Map<String, Object> baseParsePageParam(HttpServletRequest request) {
//        String data = request.getParameter("aoData");
//        Map<String, Object> pageParamMap = new HashMap();
//        JSONArray jsonArr = JSONArray.parseArray(data);
//        Iterator var6 = jsonArr.iterator();
//
//        while(var6.hasNext()) {
//            Object o = var6.next();
//            JSONObject jo = (JSONObject)o;
//            DataTablesPageParam dtpp = (DataTablesPageParam)JSON.parseObject(jo.toJSONString(), DataTablesPageParam.class);
//            pageParamMap.put(dtpp.getName(), dtpp.getValue());
//        }
//
//        return pageParamMap;
//    }
//
//    public void baseCleanQuerySession(HttpServletRequest request) {
//        SecurityUtils.getSubject().getSession().removeAttribute(this.moduleName + "IsQuery");
//        SecurityUtils.getSubject().getSession().removeAttribute(this.moduleName + "QueryModel");
//    }
//
//    public String baseGetListPage() {
//        return this.moduleJspPath + "/" + this.moduleName + "List";
//    }
//
//    public void basePreparedListData(HttpServletRequest request, BaseWebModel wm) {
//        QM qm = this.getQueryModel();
//        Object obj = SecurityUtils.getSubject().getSession().getAttribute(this.moduleName + "IsQuery");
//        if (obj != null && obj.toString().equals("true")) {
//            qm = (QM) SecurityUtils.getSubject().getSession().getAttribute(this.moduleName + "QueryModel");
//        }
//
//        qm.setDelFlag(1);
//        qm.getMapCondition().put("delFlag", ConditionOpTypeEnum.EQ.getCode());
//        qm = this.basePreparedQMFixValue(qm);
//        Pager retPager = this.bs.getByCondition(qm, wm.getPager());
//        List list = retPager.getResults();
//        wm.setPager(retPager);
//        this.baseTransResults2Rows(list, wm);
//        request.setAttribute("qm", qm);
//    }
//
//    public void basePreparedListNoInitData(HttpServletRequest request, BaseWebModel wm) {
//    }
//
//    public void baseTransResults2Rows(List list, BaseWebModel wm) {
//        wm.setRows(list);
//    }
//
//    public QM basePreparedQMFixValue(QM qm) {
//        return qm;
//    }
//
//    public boolean baseCheckQuery(QM qm, HttpServletRequest request) {
//        return true;
//    }
//
//    public void mappingQueryCondition(QM qm, HttpServletRequest request, String queryKey) {
//        Map<String, String[]> map = request.getParameterMap();
//        Iterator var6 = map.keySet().iterator();
//
//        while(var6.hasNext()) {
//            String key = (String)var6.next();
//            if (key.endsWith("_q")) {
//                String v = ((String[])map.get(key))[0];
//                qm.getMapCondition().put(key.substring(0, key.length() - 2), ConditionOpTypeEnum.valueOf(v).getCode());
//            }
//        }
//
//        SecurityUtils.getSubject().getSession().setAttribute(queryKey + "IsQuery", "true");
//        SecurityUtils.getSubject().getSession().setAttribute(queryKey + "QueryModel", qm);
//    }
//
//    public void setQueryPageParams(BaseWebModel wm, HttpServletRequest request) {
//        this.setQueryNowPage(wm, request);
//        this.setQueryPageShow(wm, request);
//    }
//
//    public void setQueryNowPage(BaseWebModel wm, HttpServletRequest request) {
//        String nowPageStr = request.getParameter("nowPage");
//        if (!StringUtils.isEmpty(nowPageStr)) {
//            wm.getPager().setNowPage(Integer.parseInt(nowPageStr));
//        }
//
//        this.setQueryPageShow(wm, request);
//    }
//
//    private void setQueryPageShow(BaseWebModel wm, HttpServletRequest request) {
//        String pageShowStr = request.getParameter("pageShow");
//        if (!StringUtils.isEmpty(pageShowStr)) {
//            wm.getPager().setPageShow(Integer.parseInt(pageShowStr));
//        }
//
//    }
//
//    public QM getQueryModel() {
//        return (QM) this.bs.getQueryModel();
//    }
//
//    public void getOneFiledValue(String name, Object queryValue, QM qm) {
//        Object[] objs = this.getFieldAndMethod(name, qm);
//        Method mth = (Method)objs[1];
//
//        try {
//            if (queryValue != null && queryValue.toString().trim().length() > 0) {
//                Class type = mth.getParameterTypes()[0];
//                if (type != Integer.TYPE && type != Integer.class) {
//                    if (type != Float.TYPE && type != Float.class) {
//                        if (type != Double.TYPE && type != Double.class) {
//                            if (type == Boolean.TYPE || type == Boolean.class) {
//                                queryValue = Boolean.valueOf("" + queryValue);
//                            }
//                        } else {
//                            queryValue = Double.parseDouble("" + queryValue);
//                        }
//                    } else {
//                        queryValue = Float.parseFloat("" + queryValue);
//                    }
//                } else {
//                    queryValue = Integer.parseInt("" + queryValue);
//                }
//            }
//
//            mth.invoke(qm, queryValue);
//        } catch (Exception var7) {
//            ;
//        }
//
//    }
//
//    public Object[] getFieldAndMethod(String name, QM qm) {
//        Field f = null;
//        Method mth = null;
//        Class cls = qm.getClass();
//
//        do {
//            try {
//                f = cls.getDeclaredField(name);
//                mth = cls.getDeclaredMethod("set" + name.substring(0, 1).toUpperCase() + name.substring(1), f.getType());
//                if (f != null) {
//                    return new Object[]{f, mth};
//                }
//            } catch (Exception var7) {
//                ;
//            }
//
//            cls = cls.getSuperclass();
//        } while(!cls.getName().equalsIgnoreCase("Object"));
//
//        return null;
//    }
//
//    public Pager doQueryList(QM qm, Pager pager) {
//        return this.bs.getByCondition(qm, pager);
//    }
//}
